// 继承:类与类之间的关系
//A继承了B这个类,那么A叫子类,B叫基类
// 子类是派生类
// 基类是超类(父类)
(()=>{
// 定义一个类
class Person{
    // 定义属性
    name:string
    age:number
    gender:string
    // 定义构造函数
    constructor(name:string='lisen',age:number=18,gender:string='男'){
        this.name = name 
        this.age = age 
        this.gender = gender
    }
    // 定义实列方法
    sayHi(str:string){
        console.log(str,`我是${this.name}`);   
    }
    
}   
// 定义一个类,继承自Person
class Student  extends Person{
    constructor(name:string,age:number,gender:string) {
        // 调用的是父类中的构造函数,使用的是super
        super(name,age,gender)
    }
    // 可以调用父类走的方法
    sayHi(){
        console.log('我是学生类中的sayHi方法');
        super.sayHi('哈哈')
    }
}
// 实列化Person
const person = new Person('大明',89,'男')
person.sayHi('嘎嘎')
// 实例化student
const stud = new Student('小美',56,'女')
stud.sayHi()


// 总结:类与类之间要有继承关系 需要extends关键字
// 子类中可以调用父类中的构造函数,使用的super关键字,包括调用父类中的实列方法
// 子类中可以重写父类中的方法
})()